<?php
	if ( eeRO_CORE_DEBUG )
	{
		ini_set('display_errors', '1');
		error_reporting(E_ALL && ~E_NOTICE);
	}
	else
	{
		ini_set('display_errors', '0');
		error_reporting(0);
	}
	
	require(eeRO_PATH_ENGINE . 'functions' . eeRO_EXT_SOURCE);
	$eeRO_session = new session();
	
	if ( eeRO_CORE_DEBUG )
	{
		$eeRO_debug = new debug(true);
	}
	else
	{
		$eeRO_debug = new debug(false);
	}
	
	set_error_handler('eeRO_error_handler');
	
	$eeRO_debug->response('Сессия начата...');
	$eeRO_debug->response('Проверяем пользователя...');
	
	$eeRO_user = $eeRO_session->get('eeRO_user');
	
	if ( $eeRO_user === null )
	{
		$eeRO_debug->response('Вы вошли как гость...');
		$eeRO_user = array('user_level' => -1);
	}
	else
	{
		$eeRO_debug->response('Добро пожаловать ' . $eeRO_user['userid'] . '...');
	}
	
	$eeRO_debug->response('Загрузка конфигурации...');
	$eeRO_config = new config();
	$eeRO_config->time_start = microtime(true);
	$eeRO_config->copyright = 'eeRO v2 - Новое поколение';
	
	
	if ( !file_exists(eeRO_PATH_ENGINE . 'user' . eeRO_EXT_SOURCE) )
	{
		eeRO_error_exit('Отредактируйте <strong>user.default.php</strong>, и сохраните его как ^file', array('^file' => 'user' . eeRO_EXT_SOURCE));
	}
	
	require(eeRO_PATH_ENGINE . 'user' . eeRO_EXT_SOURCE);
	
	$eeRO_debug->response('Загрузка шаблонизатора...');
	$eeRO_view = new view(eeRO_PATH_VIEW, 'layout.html');
	
	$eeRO_debug->response('Загрузка механизма кэширования');
	$eeRO_cache = new cache(eeRO_PATH_CACHE, eeRO_EXT_CACHE);
	
	/*foreach ( glob(eeRO_PATH_LOAD . '*.primary.php') as $load )
	{		
		$eeRO_auto = array('name' => 'Неизвестно', 'desc' => 'Неизвестно', 'version' => 'Неизвестно', 'author' => 'Неизвестно');
		include($load);
		$eeRO_debug->response('Загружен: ' . $load . ',<br /> Название: ' . $eeRO_auto['name'] . ',<br />Описание: ' . $eeRO_auto['desc'] . ',<br /> Автор: ' . $eeRO_auto['author'] . ',<br /> Версия: ' . $eeRO_auto['version']);
		$eeRO_ext[] = $eeRO_auto['name'];
	}*/
	
	if ( $eeRO_config->options['lock'] )
	{
		exit;
	}
	
	try
	{
		$eeRO_debug->response('Время со старта: ' . (microtime(true)-$eeRO_config->time_start) . '...');
		$eeRO_debug->response('Установка связи с базой данных eeRO...');
		$eeRO_base_eeRO = new mysql($eeRO_config->base_eeRO['dsn'], $eeRO_config->base_eeRO['user'], $eeRO_config->base_eeRO['pass']);
		
		$eeRO_debug->response('Установка связи с базой данных ragnarok...');
		$eeRO_base_ragnarok = new mysql($eeRO_config->base_ragnarok['dsn'], $eeRO_config->base_ragnarok['user'], $eeRO_config->base_ragnarok['pass']);
		
		$eeRO_debug->response('Обрабатываем запрос типа [app]...');
		$eeRO_config->query_app = $_GET['app'];
		if ( !preg_match('/^[a-z0-9_]{1,32}$/i', $eeRO_config->query_app) )
		{
			$eeRO_config->query_app = $eeRO_config->default_app;
		}
		
		$eeRO_debug->response('Обрабатываем запрос типа [act]...');
		$eeRO_config->query_act = $_GET['act'];
		if ( !preg_match('/^[a-z0-9_]{1,32}$/i', $eeRO_config->query_act) )
		{
			$eeRO_config->query_act = $eeRO_config->default_act;
		}
		
		$eeRO_debug->response('Время со старта: ' . (microtime(true)-$eeRO_config->time_start) . '...');
		$eeRO_debug->response('[app] = ' . $eeRO_config->query_app . ', [act] = ' . $eeRO_config->query_act . '.');
		$eeRO_debug->response('Загружаем дополнения...');
		
		$eeRO_ext = array();
		foreach ( glob(eeRO_PATH_LOAD . '*.auto.php') as $load )
		{		
			$eeRO_auto = array('name' => 'Неизвестно', 'desc' => 'Неизвестно', 'version' => 'Неизвестно', 'author' => 'Неизвестно');
			include($load);
			$eeRO_debug->response('Загружен: ' . $load . ',<br /> Название: ' . $eeRO_auto['name'] . ',<br />Описание: ' . $eeRO_auto['desc'] . ',<br /> Автор: ' . $eeRO_auto['author'] . ',<br /> Версия: ' . $eeRO_auto['version']);
			$eeRO_ext[] = $eeRO_auto['name'];
		}
		
		$eeRO_debug->response('Получим данные о текущем запросе...');
		$eeRO_base_eeRO->query('SELECT `action_level` FROM `eeRO_action` WHERE `action_app`=:app AND `action_act`=:act', array(':app' => $eeRO_config->query_app, ':act' => $eeRO_config->query_act));
		if ( $eeRO_base_eeRO->num() > 0 )
		{
			$eeRO_debug->response('Проверяем доступ к странице...');
			
			$eeRO_page_fetch = $eeRO_base_eeRO->fetch();
			if ( strpos($eeRO_page_fetch['action_level'], '~') === false )
			{
				$eeRO_page_level['0'] = $eeRO_page_fetch['action_level'];
				$eeRO_page_level['1'] = $eeRO_page_fetch['action_level'];
			}
			else
			{
				$eeRO_page_level = explode('~', $eeRO_page_fetch['action_level']);
			}
			
			if ( $eeRO_user['user_level'] < $eeRO_page_level['0'] || $eeRO_user['user_level'] >  $eeRO_page_level['1'] )
			{
				$eeRO_debug->response('У вас нету доступа, error');
				$eeRO_view->assign('module', array('title' => 'Ошибка доступа', 'template' => 'bootstrap_access.html')); 
			}
			else
			{
				if ( file_exists(eeRO_PATH_ACTION . $eeRO_config->query_app . '/' . $eeRO_config->query_act . eeRO_EXT_SOURCE) )
				{
					$eeRO_debug->response('Загрузка исполняемого модуля..');
					include(eeRO_PATH_ACTION . $eeRO_config->query_app . '/' . $eeRO_config->query_act . eeRO_EXT_SOURCE);
				}
				else
				{
					$eeRO_debug->response('Такой страницы не существует, 404');
					$eeRO_view->assign('module', array('title' => 'Ошибка 404', 'template' => 'bootstrap_404.html')); 
				}
			}
		}
		else
		{
			$eeRO_debug->response('Такой страницы не существует, 404');
			$eeRO_view->assign('module', array('title' => 'Ошибка 404', 'template' => 'bootstrap_404.html')); 
		}
	}
	
	catch ( Exception $e )
	{
		$eeRO_debug->response($e);
		$eeRO_view->assign('module', array('title' => 'Системная ошибка', 'template' => 'bootstrap_error.html'));
	}
	
	$eeRO_debug->response('Время со старта: ' . (microtime(true)-$eeRO_config->time_start) . '...');
	
	$eeRO_view->assign('user', $eeRO_user);
	$eeRO_view->assign('engine', $eeRO_config->view_site); 
	$eeRO_view->assign('copyright', $eeRO_config->copyright);
	
	$eeRO_config->time_last = microtime(true)-$eeRO_config->time_start;
	$eeRO_view->assign('time', $eeRO_config->time_last);
	$eeRO_view->assign('db_query', array('eeRO' => $eeRO_base_eeRO->count, 'ragnarok' => $eeRO_base_ragnarok->count));
	$eeRO_view->assign('cache_info', $eeRO_cache->count);
	$eeRO_view->assign('options', $eeRO_config->options);
	
	$eeRO_debug->response('Отображаем контент!');
	$eeRO_debug->response('Загрузка заняла ' . $eeRO_config->time_last . ' секунд.');
	
	$eeRO_view->display();
	$eeRO_debug->response('MySQL[ragnarok]: ' . $eeRO_base_ragnarok->count . ', MySQL[eeRO]: ' . $eeRO_base_eeRO->count);